<?php

namespace App\Http\Controllers\Auth;

use App\Http\Common\Globals;
use App\Http\Common\MyUtils;
use App\Http\Common\Sms;
use App\Http\Controllers\BaseController;
use App\Http\Requests\Admin\LoginRequest;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Session;
use Symfony\Component\HttpFoundation\ParameterBag;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Facades\JWTAuth;

/**
 * 后管登录 - 同城物业
 * Class LoginController
 * @package App\Http\Controllers\Auth
 */
class LoginController extends BaseController
{
    use AuthenticatesUsers;
    /**
     * 用户登录调用的接口
     * @param LoginRequest $request
     * @return mixed|ParameterBag
     */
    public function login(){
        // 登录，利用用户名称以及密码来进行登录
        // 从请求中获取凭据
        $credentials = $this->request->only('username', 'password');
        try {
            // 尝试验证凭据并为用户创建一个令牌
            if (! $token = JWTAuth::attempt($credentials)) {
                return MyUtils::df('账号密码错误',-1);
            }
        } catch (JWTException $e) {
            // 在试图对令牌进行编码时出错了
            return MyUtils::df('无法创建token',-1);
        }
        // 都很好，所以把token返回去
        if (!Globals::$error){// 登录成功
            return MyUtils::df("登录成功",1,compact('token'));
        }else{
            return MyUtils::df(Globals::$error,-1);
        }
    }
    /**
     * 用户登录调用的接口 - 登录 验证短信 验证码
     * @param LoginRequest $request
     * @return mixed|ParameterBag
     */
    public function loginCheckSms(LoginRequest $request){
        $code = MyUtils::sg($request,"code");
        $res = Sms::getInstance()->checkMessageCode($code);
        switch ($res){
            case -3:
                $msg = "服务器异常";break;
            case -2:
                $msg = "验证码错误";break;
            case -1:
                $msg = "验证码已过期";break;
            case 1:
                // 返回登录的信息
                $model = \App\Models\My\User::where("enable",1)
                    ->orWhereNull("enable")
                    ->where("phone",Session::get('phone'))
                    ->first();
                $model->setGlobals($model);
                $model->setSessions($model);
                return MyUtils::dealFD($this->dealData(),$res);// 发送登录 成功 后需要的数据
                break;
            default:
                $msg ="";break;
        }
        return MyUtils::dealFD($msg,$res);
    }

    /**
     * 用户注销调用的接口
     */
    public function logout(){
        MyUtils::writeLogs("注销操作","普通操作","2","注销成功");// 写入日志，注销成功
        // 清除所有的session
        Session::flush();
        return MyUtils::dealFD("注销成功！",1);
    }
}
